package cn.hy.机考.part02;

import java.util.Scanner;
import java.util.TreeSet;

/**
 * @author hy
 * 十八、求数组中最大 N 个与最小 N 个数的和，需要对数组进行去重
 * 说明:数组中数字范围[0, 1000]，最大 N 个数与最小 N 个数不能有重叠，如有重叠，输入非法返回-1
 * 第一行输入 M， M 标识数组大小;第二行输入 M 个数，标识数组内容; 第三行输入 N，N 表达需要计算的最大、最小 N 个数
 * 输出最大 N 个数与最小 N 个数的和
 * 5
 * 95 88 83 64 100
 * 2
 * 输出:342
 */
public class Demo18 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int num = Integer.parseInt(sc.nextLine());
            String[] str = sc.nextLine().split("\\s+");
            int target = Integer.parseInt(sc.nextLine());
            //建立一个treeSet来把数据从小到大储存
            TreeSet<Integer> set = new TreeSet<>();
            for (int i = 0 ; i < num ; i++) {
                set.add(Integer.parseInt(str[i]));
            }
            //判断是否满足不重叠
            if (set.size() < target * 2) {
                System.out.println(-1);
                return;
            }
            //建立一个数组。把排序好的数据存储到数组，之后就一前一后取走
            Integer[] arr = new Integer[set.size()];
            set.toArray(arr);
            int sum = 0;
            for (int i = 0 ; i < target ; i++) {
                sum += arr[i] + arr[arr.length - 1 - i];
            }
            System.out.println(sum);
        }
    }
}
